package com.resifind.www.dao;

import com.resifind.www.po.Order;
import com.resifind.www.po.Room;

import java.sql.Connection;
import java.util.List;

/**
 * @author 36069
 */
public interface OrderDao {

    /**
     * 根据客户或商户的用户id和用户类型查询订单
     *
     * @param userId   userId
     * @param userType 用户类型
     * @return 订单集合
     */
    List<Order> queryOrderByUserId(int userId, String userType);

    /**
     * 根据订单id查询订单
     *
     * @param orderId 订单id
     * @return 订单对象
     */
    Order queryOrderByOrderId(int orderId);

    /**
     * 根据房型id查询订单信息
     *
     * @param roomId 房型id
     * @return 订单集合
     */
    List<Order> queryOrderByRoomId(int roomId);

    /**
     * 根据房间号id查询订单
     *
     * @param roomNumberId 房间号id
     * @return 订单集合
     */
    List<Order> queryOrderByRoomNumberId(int roomNumberId);

    /**
     * 添加订单
     *
     * @param clientId     客户id
     * @param room         房型对象
     * @param merchantId   商家id
     * @param roomNumberId 房间id
     * @param conn         数据库连接
     * @return 是否添加成功
     */
    boolean creatOrder(int clientId, Room room, int merchantId, int roomNumberId, Connection conn);

    /**
     * 根据房型id删除订单
     *
     * @param roomId 房型id
     * @param conn   数据库连接
     * @return 是否删除成功
     */
    boolean deleteOrderByRoomId(int roomId, Connection conn);

    /**
     * 根据房间号id删除订单
     *
     * @param roomNumberId 房间号id
     * @param conn         数据库连接
     * @return 是否删除成功
     */
    boolean deleteOrderByRoomNumberId(int roomNumberId, Connection conn);

    /**
     * 根据订单id删除订单
     *
     * @param orderId 订单id
     * @param conn    数据库连接
     * @return 返回删除结果
     */
    boolean deleteOrderByOrderId(int orderId, Connection conn);

    /**
     * 客户根据id逻辑假删除订单
     *
     * @param orderId 订单id
     * @param conn    数据库连接
     * @return 是否删除成功
     */
    boolean fakeDeleteOrderByOrderId(int orderId, Connection conn);

    /**
     * 修改订单入住状态
     *
     * @param orderId   订单id
     * @param newStatus 新的订单入住状态
     * @param conn      数据库连接
     * @return 是否修改成功
     */
    boolean updateOrderCheckStatus(int orderId, String newStatus, Connection conn);

    /**
     * 修改订单交易状态
     *
     * @param orderId   订单id
     * @param newStatus 新的订单交易状态
     * @param conn      数据库连接
     * @return 是否修改成功
     */
    boolean updateOrderTradeStatus(int orderId, String newStatus, Connection conn);
}
